package com.he.strategy.context;

import com.he.enums.LikeTypeEnum;
import com.he.strategy.LikeStrategy;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * @author He
 * @version 1.0
 * @Date 2023/9/27 14:29
 * @Desc
 */
@Service
public class LikeStrategyContext {

    /**
     * 点赞策略map
     * 中包含了所有注册为 Spring bean 的策略对象，这些策略对象实现了 LikeStrategy 接口。
     * Spring 框架会自动将这些 bean 注入到 likeStrategyMap 中，以便在需要时可以根据策略的名称（键）来获取并执行相应的策略。
     */
    @Resource
    private Map<String, LikeStrategy> likeStrategyMap;

    /**
     * 点赞
     * @param likeType 点赞类型
     * @param commentId   评论id
     */
    public void executeLikeStrategy(LikeTypeEnum likeType, Integer commentId) {
        likeStrategyMap.get(likeType.getStrategy()).like(commentId);
    }
}
